Utilities for CHESSEDT.EXE Andrew Kochera All programs in this package are copyright 1991 by Andrew Kochera. CHESSEDT is copyright by Stephen M. Wharry. CHESSEDT is shareware. NICBASE is a trademark of Interchess. TurboBasic is a trademark of Borland International, Inc. The programs in this package are Freeware; you may copy, use, and distribute these programs without charge. However, if distributed, they must be unchanged and complete. WAIVER: the author of these programs accepts no liability or responsibility for the manner in which these programs are used, and will not be responsible for damages, monetary or otherwise, resulting from the use or misuse of these programs. I. Introduction Stephen Wharry's CHESSEDT program is primarily designed for use by the postal player. It's storage, retrieval, and editing features are quite well designed for this purpose; indeed, its popularity on Chess bulletin boards is a tribute to its inspired design. However, it lacks many of the features that might make it a full fledged database, such as an opening key and sophisticated search routines. The following programs are intended to bolster CHESSEDT's database abilities, though they are by no means as clever, fast, or exhaustive as commercial database programs. There are 6 programs in this package: UTILS.TXT this documentation AUTOKEY.EXE opening key program OPENING.DAT opening key database FINDGAME.EXE search/print game program EXTRACT.EXE pre-extraction program FLNM.EXE multiple game file rename utility In addition, you may find a READ.ME file which contains notes on the current release version. Finally, I should emphasize that although these programs are Freeware, Stephen Wharry's CHESSEDT program is not. It is shareware and may be found on many BBS's, especially those with a chess conference. If you decide that you like CHESSEDT, and continue to use it, please register it with Mr. Wharry at the address provided in his manual. In return, you will be provided with the most recent updates and have the satisfaction of knowing that you have supported the concept of shareware. II. Using CHESSEDT as a Database As a modem user, I have benefited from the wealth of chess ASCII files available on various networks. Over the past year, I have collected virtually thousands of chess games from famous players and events, all by logging on to some of my favorite computer bulletin boards. Naturally, having chess games in text form is very useful; you can set up your chess board and play through the games. This is both entertaining and educational. However, after several games it also becomes tedious to continue setting up the board and moving pieces by hand. An obvious answer to this problem is to buy a program which can read ASCII (text) chess games, and display them graphically on the computer screen. Not only does it make game review easier, but you can also take advantage of the computer's abilities to search through collections of games using various criteria. The best shareware program I have seen for this purpose on computer networks is Stephen Wharry's CHESSEDT, which was originally designed for postal use. However, for managing large numbers of games, additional file management abilities and search criteria are desirable. For instance, to import a game from a text file, CHESSEDT requires that the user format the text file with certain delimiters (eg, 'bg' 'eg' 'ba') so that the program will know where a game begins and ends. In a very large text file of chess games, this can be tiring. Why not try to develop a program which will automatically insert these delimiters? To be sure, it is no easy task, since there are many formats that chess games are recorded in. But some formats seem more common than others, and I have written a pre-extraction utility to help insert delimiters to those common type ASCII chess files. This speeds up extraction of large quantities of games. Also, if a user wishes to create an opening database, it would be nice to have a program which will automatically read in a range of CHESSEDT game files and key their openings. To that end, I have written a simple AUTOKEY utility; once game files are keyed, openings may be searched by name. CHESSEDT already has an excellent search game utility. The user can search a range of files by player's names, tournament, date, etc. The version of CHESSEDT I currently use searches text by looking for a match on the left hand side of the string, ie, if you search for "Bobby" you will find games that have "Bobby Fischer" but not necessarily games that have "Fischer, Bobby". I have here included a utility which will search for occurence in a string regardless of the position within that string. In addition, this search utility can also search for an opening string and print out matching games in a variety of common formats. Finally, if you are going to store a large number of games, one must be prepared to deal with your system's Disk Operating System (DOS). CHESSEDT game files each contain one game; therefore, if you have 1000 games, you must have 1000 files on your disk. Please note that the root directory on a floppy disk can only hold a hundred or so files. To store more, create a subdirectory for your game files. If you are using a hard disk to store game files, another problem arises. Most hard disks access files according to a cluster, which can be defined anywhere from 512 bytes to 4000 bytes or more. Regardless of the size of your game file, it will effectively take a full cluster of storage space, since there can be only one file per cluster. So even if your game file is 600 bytes, it may require around 2000 bytes of storage, depending on the cluster size of your hard drive. Motto: watch your disk space carefully, or store your games on floppies, which usually have a cluster size of only 1024 bytes. Floppies are slower, but more space efficient when dealing with large numbers of very small files. With such a large number of game files, you may wish to rename them according to their opening for easy retrieval, and to sort them into subdirectories on the basis of their opening name. Perhaps you wish to renumber them. I have included a few renaming utilities to help with this. Finally, please note that if you are REALLY into collecting HUGE numbers of chess games, even these utilities cannot keep pace. Such a chess hobbyist should definitely think about a commercial chess database. III. AUTOKEY.EXE A. Overview The AUTOKEY utility reads in CHESSEDT game files, and will search through a predefined database of opening codes until a match is found. The search method is textual, rather than positional; therefore, it is not as accurate as other methods. However, the user should find the performance surprisingly accurate in most situations. I have used this utility to key several thousand games with a reasonable degree of precision. Please note that this utility will *only* work with short algebraic chess notation, ie e4 Nf6, rather than e2-e4 g8-f6, etc. Further note than the program can catch simple transpositions. The order of the moves are irrelevent. To AUTOKEY, the following are identical: 1.e4 c6 2.d4 d5 3.Nc3 Nf6 1.Nc3 c6 2.d4 d5 3.e4 Nf6 B. How it works AUTOKEY consists of two files. The first is the program AUTOKEY.EXE, which contains the program executable code. It was written in Turbobasic, of all things, and is not the paragon of speed. However, I have noticed that computers installed with a math coprocessor, or computers with 25Mhz or higher, are reasonably fast for small to mid-sized applications. If you are going to key many hundreds of game files (or thousands!) on an old XT, you should plan to leave the computer on overnight. It is not the author's contention that this program performs nearly as fast as commercial database keys. The companion file is OPENING.DAT, which is the catalogue of opening systems which AUTOKEY can recognize. OPENING.DAT is nothing more than a text file, which contains opening names and corresponding moves, one after the other. If the user wishes, he/she may add or change the openings found in this file by using a text editor or word processor which can save to raw ASCII. Please make sure, if changing OPENING.DAT, that your word processor does not leave special codes in the saved text. In order for AUTOKEY.EXE to properly read OPENING.DAT, the following rules apply: 1. There must be no blank lines anywhere in the file 2. The opening entry must contain two lines; firstly, the name of the opening (preferably under 40 characters, but up to 80). The second line will contain the moves of the opening. Notice that this means opening names are on odd numbered lines, and moves on even numbered lines. 3. The opening moves must be in condensed short algebraic. (see section III D for what I mean by this admittedly confusing term) 4. There should be no blank spaces at the beginning or end of any line. 5. Do not include move numbers, ie write 1.e4 c6 2.d4 as e4 c6 d4 In the current version, AUTOKEY can read up to 500 openings, and already has around 245 in the OPENING.DAT file. C. Using AUTOKEY To reiterate: AUTOKEY.EXE can only read short algebraic chess notation (ie, e4, Nf3). This has become the norm in most magazines and BBS chess ASCII files. However, there are still some sources which use old descriptive notation (P-K4, N-KB3,etc); AUTOKEY cannot recognize those. And although AUTOKEY reads short algebraic game files, any additions or changes to the provided OPENING.DAT file must be in condensed short algebraic. But if you don't change the OPENING.DAT file, and you probably won't, that's no problem. Make sure both AUTOKEY.EXE and OPENING.DAT are in the current directory. Now, at the dos prompt type 'AUTOKEY' and hit your return key. The program will load and execute. For the next several moments, depending on the speed of your computer, the program will read in the openings and set up an internal array. Once this has been completed, the computer will prompt you for the directory that contains the CHESSEDT games you want keyed. Be sure to write this as you would in any ordinary Dos application, including the drive and backslashes. For example: c:\gamfiles\ or d:\chess\games\ (Please include the final backslash) Now hit return. The computer now asks for a filespec. That means it wants you to describe that name(s) of the game file(s) you want keyed. I use the possible plural since the program *does* accept Dos wildcards. Here are some examples: BRAD0291.GAM (to key a single game of that file name) US91*.GAM (to key all games which have US91 in the first four characters of the file name) Hit return again. Now the tricky part. The program will ask you for the number of iterations you require, from 0 to 4. Obviously, we must take a moment to describe what an 'iteration' means in the context of this program! The number of iterations determines how deep in the game file AUTOKEY will search for an opening. On the first pass, AUTOKEY will only search as deeply as the current opening being considered; ie, if AUTOKEY is currently considering e4 c6, it will first search only the first two ply (one move) of the game file. It will do so for each opening in the database described by OPENING.DAT. Now, if there are no opening matches larger than 2 ply, AUTOKEY must decide whether to search further into the game. This is where the term iteration comes in. If there are no matches in the first pass, and iteration is set to one, AUTOKEY will go back and try again to key the game, THIS TIME SEARCHING ONE EXTRA PLY INTO THE GAME FILE. Notice if there is an exact match on the first pass (iteration 0), and this match is greater than 2 ply, the game will be keyed and the program will look no further. Up to four iterations may be selected; that is, for particularly difficult games, AUTOKEY will search up to 4 ply into the game beyond the number of moves in openings searched for. Then it will just give up; "call it irregular for heavens sake!", AUTOKEY seems to be saying. The purpose of the iteration ability was to make it possible to catch opening transpositions which include an odd move or two. The trade off is that AUTOKEY may start to recognize more than one good opening match, and possibly some inferior matches as well. An iteration setting of 2 is quite adequate. Once you have chosen the number of iterations, hit return and the program will begin. The progress is shown on the screen. Each game file name is printed as it is considered, and beneath it are any matches that are found. AUTOKEY will attempt to find the best match as it continues its work, so a game which is a Ruy Lopez will first be classified as an e-pawn opening, then a double kings pawn opening, then a Ruy Lopez, and then (if possible) the particular Ruy Lopez variation. D. Short Algebraic What do I mean by condensed short algebraic? Well, short algebraic consists of the piece followed by destination square. IE, Nf3 or Bc4. Pawns are simply written as the destination square, ie e4 or d4. Captures include an 'x', such as Nxf3 or (in the case of a pawn) cxd4. In condensed short notation, please exclude the 'x' during a capture. Also exclude the row number in a pawn capture. In condensed short notation, the prior example would look like Nf3 and cd. Also, do not include notational commentary, such as ! or ? in the opening database. These characters are fine in the game file, though; AUTOKEY will ignore them in its search. IV. FINDGAME.EXE A. Overview FINDGAME.EXE will search game files according to a variety of criteria, which may be used in combination. For instance, you may search for all games by a certain player and year, and even include an opening search string if you are trying to track down a specific game from a large number of files. Once found, the games which match the search criteria may be listed in a variety of ways and saved to a text file. This text file may later be sent to a printer, or if the user has chosen the print game option, the file may be reviewed within CHESSEDT using the Document view routine. B. Using FINDGAME Go into the directory which contains the FINDGAME.EXE file, and type FINDGAME. When the program runs, you will see the screen fill with a variety of choices. First, you must tell the program the directory for it to search in. Specify the directory as you would within DOS, including the drive, colon, and backslash keys. For instance, to search the GAME directory in drive a, type "A:\GAME\". Be sure to include the last backslash. Then the program will ask for a filespec; that is, which file names you wish to search. You may use DOS wildcards here. Be sure to include ".GAM", ie, "GARY*.GAM" to search all files which begin with the letters "GARY". Next, the program will ask for the target file. This is the file that the program will write the results of the search to. Write the full file name, including the directory that you want it to be sent to. For example, "b:\CHESS\RESULTS.TXT" will send any matching results to a file called "RESULTS.TXT" in the directory called "CHESS" on drive "b:". As with any DOS filenames, be sure to be accurate when entering the above options, or an error may occur. So before sending the results to the "CHESS" directory, make sure that the directory exists! The next set of questions concerns the search criteria. Any or all of these options may be left blank. Opening, Player, Tournament, Score, and Date are easy enough. Just type in the particular string you are looking for. After the player option, you have a choice of searching for that player as White, Black, or Either (default). For instance, if you are searching for all the games in which Karpov played, type "Karpov" at the Player prompt, and then select 'E' (for either white or black). You may include an opening like "Sic", to search for Karpov's Sicilian games. Notice that FINDGAME.EXE searches for occurence, regardless of the position; that is, typing "Ka" at the Player prompt will find games which have "Anatoly Karpov", "Karpov, Anatoly" or even "Gary Kasparov" listed as a player. The last search criteria, Opening String, can be used to search for a particular opening string. To find games which begin with the moves 1.e4 c6 2.d4 Bf5, type the moves without the move numbers. That is, type "e4 c6 d4 Bf5" and hit return. If you decide to search for an opening string, you will also be asked for the number of iterations. See the AUTOKEY section for an explanation of this. The last questions simply ask how you want the results printed to the file. If you only want the file names which include matches, type "1", return, and then type "Yes" at the "Include file name" prompt. Alternatively, you may wish to print the complete games, so you might chose options 3 or 4. Options 3 and 4 allow you to print the entire game, including the heading and result. The only difference between these two options is that #4 (Format B) includes the opening name, and #3 (Format A) does not. If the choices seem bewildering, a little practice will quickly serve to clarify things. Choose various options to get accustomed to the them. V. EXTRACT.EXE - Extraction Utility A. Overview Many chess bulletin boards contain a number of chess game collections which are usually kept in plain ASCII text files. It is instructional to download these collections and play over the games at your leisure. If you extract these games to CHESSEDT format, you can use CHESSEDT to categorize, edit,and view those games. The problem is that there is sometimes a bit of work necessary to get the text file into a form that CHESSEDT can understand. EXTRACT can diminish, but probably will not eliminate, the work required to input a large number of ASCII chess games from a text file to CHESSEDT format. Steve Wharry's CHESSEDT provides a utility within the program to extract chess games from plain text files. First, however, the user must edit the text files and insert various delimiters to tell CHESSEDT where games, headings, etc begin and end. Even with a good word processor, this can be a tedious task. EXTRACT has four options for inputing those delimiters automatically to a text file. If a text file contains chess games which match one of the standard formats that EXTRACT can recognize, then the process of extracting up to hundreds of games can be completed in a tiny fraction of the time previously required. If the text file you wish to extract games from presents games in a format EXTRACT cannot recognize, then it is likely that you can use a few global search/replace functions in your word processor to alter the text file until EXTRACT is able to recognize it. B. Preparing the Text File In order to use EXTRACT, the file of chess games must: 1) be in ordinary ASCII; that is, it should have no special codes. If you edit the text file with your word processor, make sure you save the game as plain ASCII. By default, many word processors include special codes when saving text, but you will want to over-ride this. 2) have a blank line both at the beginning and at the end of the text file 3) there must be at least one blank line between chess games 4) each chess game must have the result immediately at the end of the moves, either on the same line as the last line of moves, or on the line immediately thereafter 5) the result should be in the form 1-0, 0-1, or Draw (or 1/2). Extract cannot recognize 'Win' or 'Mate', since it is not smart enough to figure out which player won. 6) each line of a chess game MUST be flush with the left margin; that is, there should be no spaces at the beginning of any line in a chess game. These conditions may seem stringent, however, most chess text files already meet all six of these requirements. EXTRACT searches for chess games by searching for results. For example, when it finds "1-0", it assumes it has found the end of a game. Then, it searches backward for the moves and a heading. But in reality, EXTRACT can only recognize games if they appear in one of four formats, which are here referred to as 'A', 'B', 'C' and 'D'. You will probably still need your word processor to make sure that the games in the text file are in one of these forms. However, most collections of games I've seen on bulletin boards are close to one of these forms, and a little global search/replace from a word processor will get things in order. B.1 FORMAT A Format 'A' consists of a heading which contains players' names and the tournament (which may include a date). A game in format 'A' should look as follows: WHITEPLAYER-BLACKPLAYER TOURNAMENT 1.e4 c6 2.d4 c6 ..... (or whatever the moves are) RESULT example: Kasparov,G-Chiburdanidze,M Baku, 1980 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 0-0 6.Be2 e5 7.Be3 Qe7 8.d5 Ng4 9.Bg5 f6 10.Bh4 h5 11.h3 Nh6 12.Nd2 c5 13.Nf1 Nf7 14.g4 hxg4 15.Bxg4 g5 16.Bxc8 Rxc8 17.Ne3 gxh4 18.Nf5 Qd8 19.Qg4 Ng5 20.Nxh4 Rc7 21.Nf5 a6 22.h4 Nh7 23.Rg1 Qf8 24.Ke2 Ra7 25.a4 b6 26.Qh5 Kh8 27.Rg6 Rd7 28.Rag1 Rab7 29.Qg4 Rbc7 30.Rg2 Rb7 31.Kf1 Ra7 32.Kg1 Rf7 33.Ne2 Qc8 34.f4 b5 35.axb5 axb5 36.cxb5 Rab7 37.h5 Nf8 38.Qh3 Nxg6 39.hxg6+ Kg8 40.gxf7+ Kf8 1-0 If your text file contains chess games in this format, then you should choose option '1' from the EXTRACT main menu. B.2 FORMAT B Format B is the same, except that it reads games which have the opening listed on a line between the TOURNAMENT line and the first line of game moves. That is: WHITEPLAYER-BLACKPLAYER TOURNAMENT OPENING 1.e4 c6 2.d4 c6 ..... (or whatever the moves are) RESULT example: Kasparov,G-Chiburdanidze,M Baku, 1980 KIN 01: King's Indian - Classical 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 0-0 6.Be2 e5 7.Be3 Qe7 8.d5 Ng4 9.Bg5 f6 10.Bh4 h5 11.h3 Nh6 12.Nd2 c5 13.Nf1 Nf7 14.g4 hxg4 15.Bxg4 g5 16.Bxc8 Rxc8 17.Ne3 gxh4 18.Nf5 Qd8 19.Qg4 Ng5 20.Nxh4 Rc7 21.Nf5 a6 22.h4 Nh7 23.Rg1 Qf8 24.Ke2 Ra7 25.a4 b6 26.Qh5 Kh8 27.Rg6 Rd7 28.Rag1 Rab7 29.Qg4 Rbc7 30.Rg2 Rb7 31.Kf1 Ra7 32.Kg1 Rf7 33.Ne2 Qc8 34.f4 b5 35.axb5 axb5 36.cxb5 Rab7 37.h5 Nf8 38.Qh3 Nxg6 39.hxg6+ Kg8 40.gxf7+ Kf8 1-0 If your text file contains games in this format, then choose option '2' from the EXTRACT main menu. B.3 Format C Format C has each player listed, on a separate line, as white or black. The words "White:" or "Black:" or "W:" or "B:" are recognized by extract as player labels. Then follows the tournament name, and next an opening label. After this heading follow the moves and result. Some examples of this format are: White: Kasparov,G Black: Chiburdanidze,M Baku, 1980 KIN 01: King's Indian - Classical 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 0-0 6.Be2 e5 7.Be3 Qe7 8.d5 Ng4 9.Bg5 f6 10.Bh4 h5 11.h3 Nh6 12.Nd2 c5 13.Nf1 Nf7 14.g4 hxg4 15.Bxg4 g5 16.Bxc8 Rxc8 17.Ne3 gxh4 18.Nf5 Qd8 19.Qg4 Ng5 20.Nxh4 Rc7 21.Nf5 a6 22.h4 Nh7 23.Rg1 Qf8 24.Ke2 Ra7 25.a4 b6 26.Qh5 Kh8 27.Rg6 Rd7 28.Rag1 Rab7 29.Qg4 Rbc7 30.Rg2 Rb7 31.Kf1 Ra7 32.Kg1 Rf7 33.Ne2 Qc8 34.f4 b5 35.axb5 axb5 36.cxb5 Rab7 37.h5 Nf8 38.Qh3 Nxg6 39.hxg6+ Kg8 40.gxf7+ Kf8 1-0 - or - W: Kasparov,G B: Chiburdanidze,M Baku, 1980 KIN 01: King's Indian - Classical 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 0-0 6.Be2 e5 7.Be3 Qe7 8.d5 Ng4 9.Bg5 f6 10.Bh4 h5 11.h3 Nh6 12.Nd2 c5 13.Nf1 Nf7 14.g4 hxg4 15.Bxg4 g5 16.Bxc8 Rxc8 17.Ne3 gxh4 18.Nf5 Qd8 19.Qg4 Ng5 20.Nxh4 Rc7 21.Nf5 a6 22.h4 Nh7 23.Rg1 Qf8 24.Ke2 Ra7 25.a4 b6 26.Qh5 Kh8 27.Rg6 Rd7 28.Rag1 Rab7 29.Qg4 Rbc7 30.Rg2 Rb7 31.Kf1 Ra7 32.Kg1 Rf7 33.Ne2 Qc8 34.f4 b5 35.axb5 axb5 36.cxb5 Rab7 37.h5 Nf8 38.Qh3 Nxg6 39.hxg6+ Kg8 40.gxf7+ Kf8 1-0 If your text file contains games in one of these two formats, then choose option '3' from the EXTRACT main menu. B.4 Format D Format D has the name of the opening listed on line one along with (after several spaces) some other notation used to describe its source. On the next line come the player names separated by a dash, and on the third line of the heading is the tournament. Then follow the moves and the result. I have noticed that NICBASE often uses this format to output its games. Example: AB 1.23.4 Mag Article Kasparov,G - Chiburdanidze,M Baku, 1980 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 0-0 6.Be2 e5 7.Be3 Qe7 8.d5 Ng4 9.Bg5 f6 10.Bh4 h5 11.h3 Nh6 12.Nd2 c5 13.Nf1 Nf7 14.g4 hxg4 15.Bxg4 g5 16.Bxc8 Rxc8 17.Ne3 gxh4 18.Nf5 Qd8 19.Qg4 Ng5 20.Nxh4 Rc7 21.Nf5 a6 22.h4 Nh7 23.Rg1 Qf8 24.Ke2 Ra7 25.a4 b6 26.Qh5 Kh8 27.Rg6 Rd7 28.Rag1 Rab7 29.Qg4 Rbc7 30.Rg2 Rb7 31.Kf1 Ra7 32.Kg1 Rf7 33.Ne2 Qc8 34.f4 b5 35.axb5 axb5 36.cxb5 Rab7 37.h5 Nf8 38.Qh3 Nxg6 39.hxg6+ Kg8 40.gxf7+ Kf8 1-0 If your text file contains games in this format, select '4' from the EXTRACT main menu. D. Running EXTRACT.EXE When running the program, you will be presented with a menu of options. To extract game files, choose the option which matches the format of the games in the text file. Then, the program will ask you to specify the source file (including directory) and target file. The target file that EXTRACT writes will hopefully be suitable for extraction by CHESSEDT. NOTE #1: watch for games with more than 100 moves; CHESSEDT has trouble reading these, and you could get an error. If in doubt, go into the target file, search for games with more than 100 moves, and either delete them or put extra moves between the annotation delimiters. NOTE #2: EXTRACT.EXE has a simple routine which tries to find the date in the tournament heading. At present, it will only recognize a full year. For instance, if the text file chess game lists the tournament as "Linares 1990", then 1990 will appear in the CHESSEDT file as the date (in addition to appearing in the tournament name). However, EXTRACT.EXE will not recognize partial year citations, like "Linares '90". Also, the present program will only recognize years within the 20th century. NOTE #3: the pre-extraction routines are PICKY! If some of the chess games in your text file deviate from the format you have specified, you will most likely wind up with an error. So be sure to quickly review your text file beforehand to catch any incongrous games. D. After Extraction After extracting games with CHESSEDT.EXE, you might run option 3 on the EXTRACT main menu (post-extraction utility). This will make sure that the result was recorded. Sometimes CHESSEDT has trouble finding the result. The post-extraction utility will search game files, and if the result is found in an annotation, it will also be recorded in the CHESSEDT file's internal heading. Since the pre-extraction routines put results in annotations, it is a good idea to run POSTEX on the games after they have been extracted by CHESSEDT. When run, the post-extraction routine will ask for a directory to look in. As usual, be sure to include the drive, colon, and the directory with leading and trailing slashes, ie "A:\GAMES\". Then the program will ask for a filespec. Type in a file name (with DOS wildcards, if desired) and POSTEX will place the result of the game from annotation to heading of the matching file (or files). Usually, the filespec will be something like "*.GAM", to specify all game files in that directory. VI. FLNM.EXE A. Overview Since CHESSEDT's games are each stored as a separate file, the user may find it convenient to have some file-oriented utilities to help organize his/her collection of games. To this end, FLNM contains three interesting utilities: FLNM1 will take the first four letters of the opening and place it in the first four spaces of the file name. Good for naming files according to their opening! FLNM2 will renumber a range of games sequentially, using the last four spaces of the file name. This can be used to refer to games by their number, which is particularly useful in an opening database where files have similar names. FLNM3 will transpose the first four letters of the file name with the last four letters. Since CHESSEDT doesn't need a full file name to open a game file, users often only include a partial name, such as "Mark". In this case, CHESSEDT opens the first game file it finds where the first four letters are "Mark". Naturally, in an opening database, it may be useful to bring the number of the file (if the last four letters in the file name are a number) to the front. That way, if you want to view game #45, you can just enter 0045 when CHESSEDT prompts you for a file name. B. Using FLNM.EXE To use FLNM1, FLNM2, or FLNM3, type 1,2, or 3 at the main menu of FLNM.EXE. In each case, the program will ask for the directory to look in (remember drive and backslashes!) and a filespec. As usual, the filespec may include DOS wildcards if you wish to affect a number of files at once. The program FLNM2 will also ask for a starting number. The default is to start numbering sequentially at 1. APPENDIX: Autokey Opening Codes These openings are already provided in OPENING.DAT and are recognized by AUTOKEY. IRR 01: King's Pawn Game IRR 02: Double King's Pawn Game IRR 03: Queen's Pawn Game IRR 04: Double Queen's Pawn Game KGD 00: King's Gambit Declined KGA 00: King's Gambit Accepted KBG 00: King's Bishop Gambit FCG 00: Falkbeer Countergambit VIE 00: Vienna Game RUY 00: Ruy Lopez RUY 01: Ruy Lopez - Classical RUY 02: Ruy Lopez - Berlin Defense RUY 03: Ruy Lopez - Cozio Defense RUY 04: Ruy Lopez - Bird's Defense RUY 05: Ruy Lopez - Schliemann Defense RUY 06: Ruy Lopez - Old Steinitz RUY 07: Ruy Lopez - g6 Variation RUY 08: Ruy Lopez - Exchange Variation RUY 09: Ruy Lopez - Fianchetto RUY 10: Ruy Lopez - Breyer RUY 11: Ruy Lopez - Smyslov RUY 12: Ruy Lopez - Chigorin RUY 13: Ruy Lopez - Marshall Attack RUY 14: Ruy Lopez - Open Defense RUY 15: Ruy Lopez - Modern Steinitz THR 00: Three Knights' Game FOR 00: Four Knights' Game GIU 00: Giuoco Piano GIU 01: Giuoco Piano - Moller Attack GIU 02: Giuoco Piano - "Pianissimo" GIU 03: Giuoco Piano - Evans Gambit TWO 00: Two Knights TWO 01: Two Knights - Main Line TWO 02: Two Knights - Wilkes-Barre TWO 03: Two Knights - Max Lange Attack SCO 00: Scotch Game SCO 01: Scotch Gambit GOR 00: Goring Gambit PON 00: Ponziani's Opening PET 00: Petrov's Defense PHI 00: Philidor's Defense PHI 01: Philidor's Defense - Hanham LAT 00: Latvian Gambit BIS 00: Bishop's Opening CEN 00: Center Game DAN 00: Danish Gambit HUN 00: Hungarian Defense QPC 00: Queen's Pawn Counter Gambit ALA 00: Alapin's Opening ALE 00: Alekhine ALE 01: Alekhine - Modern Variation ALE 02: Alekhine - Exchange Variation ALE 03: Alekhine - Four Pawns Attack ALE 04: Alekhine - Two Pawns Attack CAR 00: Caro-Kann CAR 01: Caro-Kann - Main Line CAR 02: Caro-Kann - Classical CAR 03: Caro-Kann - Nimzowitsch CAR 04: Caro-Kann - Advance CAR 05: Caro-Kann - Two Knights CAR 06: Caro-Kann - Panov-Botvinnik CAR 07: Caro-Kann - Exchange CAR 08: Caro-Kann - Fantasy FRE 00: French FRE 01: French - Classical FRE 02: French - Alekhine-Chatard FRE 03: French - Burn FRE 04: French - Maccutcheon FRE 05: French - Steinitz FRE 06: French - Rubinstein FRE 07: French - Winawer FRE 08: French - Tarrasch FRE 09: French - Tarrasch (Guimard Var) FRE 10: French - Exchange FRE 11: French - Advance FRE 12: French - Tchigorin FRE 13: French - Two Knights' FRE 14: French - King's Indian Attack SIC 00: Sicilian SIC 01: Sicilian - Najdorf SIC 02: Sicilian - Najdorf Poisoned Pn SIC 03: Sicilian - Najdorf Polugaevsky SIC 04: Sicilian - Scheveningen SIC 05: Sicilian - Scheveningen SIC 06: Sicilian - Scheveningen Keres SIC 07: Sicilian - Dragon SIC 08: Sicilian - Dragon Yugoslav SIC 09: Sicilian - Dragon Classical SIC 10: Sicilian - Dragon Levenfish SIC 11: Sicilian - Accelerated Dragon SIC 12: Sicilian - Taimanov SIC 13: Sicilian - Paulsen SIC 14: Sicilian - Four Knights SIC 15: Sicilian - Counter Attack SIC 16: Sicilian - Lowenthal SIC 17: Sicilian - Pelikan SIC 18: Sicilian - Richter-Rauzer SIC 19: Sicilian - Boleslavsky SIC 20: Sicilian - Velimirovic SIC 21: Sicilian - Sozin SIC 22: Sicilian - Closed SIC 23: Sicilian - Gran Prix SIC 24: Sicilian - Morra Gambit SIC 25: Sicilian - Nimzowitsch SIC 26: Sicilian - Wing Gambit SIC 27: Sicilian - Keres PIR 00: Pirc PIR 01: Pirc - Austrian PIR 02: Pirc - Classical PIR 03: Pirc - Byrne PIR 04: Pirc - Fianchetto PIR 05: Pirc - f3 System MOD 00: Modern Defense CCD 00: Center Counter Defense NIM 00: Nimzowitsch Defense SAI 00: St. George BAS 00: Basman Defense OWE 00: Owen's Defense QGD 00: Queen's Gambit QGD 01: QGD - Orthodox QGD 02: QGD - Petrosian QGD 03: QGD - Cambridge Springs QGD 04: QGD - Lasker's Defense QGD 05: QGD - Tartakower Variation QGD 06: QGD - Exchange Variation QGD 07: QGD - Classical QGD 08: QGD - Ragozin QGD 09: QGD - Semi-Tarrasch QGD 10: QGD - Tarrasch QGD 11: QGD - Tarrasch Rubinstein QGD 12: QGD - Tarrasch Swedish Var. QGD 13: QGD - Tarrasch Marshall Gambit QGD 14: QGD - Tarrasch Von Hennig Gmbt QGD 15: QGD - Chigorin's Defense QGD 16: QGD - Albin Counter Gambit QGA 00: Queen's Gambit Accepted QGA 01: QGA - Main Line SLA 00: Slav SLA 01: Semi-Slav Meran SLA 02: Semi-Slav - Romih Variation SLA 03: Semi-Slav Anti-Meran SLA 04: Slav Czech SLA 05: Slav Exchange SLA 06: Slav Exchange - Marshall Gambit SLA 07: Slav Exchange - Abrahams BDG 00: Blackmar-Diemer Gambit VER 00: Veresov Attack QBA 00: Queen's Bishop Attack TOR 00: Torre Attack RUT 00: Ruth-Trompowski Attack STO 00: Stonewall Variation COL 00: Colle System KFD 00: King's Fianchetto Defense POL 00: Polish Defense QKD 00: Queen's Knight Defense BLU 00: Blumenfeld Counter Gambit BUD 00: Budapest Defense BUD 01: Budapest Defense - Fajarowicx DUT 00: Dutch Defense DUT 01: Dutch Defense - Leningrad DUT 02: Dutch Defense - Classical DUT 03: Dutch Defense - Staunton Gambt QIN 00: Queen's Indian QIN 01: Queen's Indian QIN 02: Queen's Indian - Petrosian BOG 00: Bogo-Indian Defense NID 00: Nimzo-Indian NID 01: Nimzo-Indian - Classical NID 02: Nimzo-Indian - Milner-Barry NID 03: Nimzo-Indian - Rubinstein NID 04: Nimzo-Indian - Gligoric Var. NID 05: Nimzo-Indian - Fischer Var. NID 06: Nimzo-Indian - Hubner System NID 07: Nimzo-Indian - Saemisch NID 08: Nimzo-Indian - Leningrad NID 09: Nimzo-Indian - Spielman Var. CAT 00: Catalan CAT 01: Catalan - Open Variation CAT 02: Catalan - Classical CAT 03: Catalan - Closed Variation GIN 00: Grunfeld Defense GIN 01: Grunfeld Defense - Exchange GIN 02: Grunfeld Defense - Classical GIN 03: Grunfeld Defense - Smyslov GIN 04: Grunfeld Defense - Prins Var. GIN 05: Grunfeld Defense - NeoGrunfeld KIN 00: King's Indian KIN 01: King's Indian - Classical KIN 02: King's Indian - Samisch KIN 03: King's Indian - Samisch Orthod KIN 04: King's Indian - Samisch Panno KIN 04: King's Indian - Fianchetto KIN 05: King's Indian - Averbakh KIN 06: King's Indian - Four Pawns OLD 00: Old Indian Defense BEN 00: Benoni BEN 01: Benoni - Main Line BEN 02: Benoni - Knight's Toure BEN 03: Benoni - Four Pawns BEN 04: Benoni - Mikenas Attack BEN 05: Benoni - Taimanov's Variation BEN 06: Czech Benoni BEN 07: Old Benoni BKG 00: Benko Gambit ENG 00: English ENG 01: English - Sicilian Reversed ENG 02: English - Four Knights ENG 03: English - Bremen ENG 04: English - Keres ENG 05: English - Closed ENG 06: English - Symmetrical ENG 07: English - Symm. Four Knights ENG 08: English - Hedgehog ENG 09: English - Rubinstein/Botvinnik ENG 10: English - Ultra-Symmetrical ENG 11: English - Asymmetrical Var. RET 00: Reti RET 01: Reti - Barcza RET 02: Reti - Benoni Reversed RET 03: Reti Accepted RET 04: Reti - London System RET 05: Reti - Neo-Catalan KIA 00: King's Indian Attack KIA 01: King's Indian Attack GRR 00: Grunfeld Reversed NIA 00: Nimzowitsch-Larsen Attack NIA 01: Nimzowitsch-Larsen Attack PDD 00: Polish Defense Deferred LIS 00: Lisitsin Gambit KFO 00: Benko's Opening LAR 00: Larsen's Opening BIR 00: Bird's Opening FRO 00: From's Gambit GRO 00: Grob's Attack DUN 00: Dunst SOK 00: Sokolsky Opening